package it.csi.finregio.finreges.client.finders;

import it.crp.crparch.web.struts.service.WebServiceException;
import it.crp.exception.ServiceException;
import it.crp.logger.PrdLoggerFactory;
import it.csi.finregio.finreges.client.ServiceLocator;
import it.csi.finregio.finreges.dto.Direzione;
import it.csi.finregio.finreges.dto.Ente;
import it.csi.finregio.finreges.dto.Scheda;
import it.csi.finregio.finreges.integration.FinregioService;
import it.csi.finregio.finreges.integration.SchedaService;

import java.util.Collection;

import org.apache.log4j.Logger;

public class FinderService {

	private Logger log = PrdLoggerFactory.getInstance().getLogger("finreges");

	public Collection getListaStati() throws WebServiceException {
		try {
			FinregioService service = getFinregioService();
			Collection listaStati = service.getListaStatoScheda();
			return listaStati;
		} catch (ServiceException e) {
			log.error("[FinderService::getListaStati]  " + e.getMessage(), e);
			throw new WebServiceException(e.getMessage());
		}

	}

	public Collection getListaSottoClassificazioni() throws WebServiceException {
		try {
			return getFinregioService().getListaSottoclassificazioni();
		} catch (ServiceException e) {
			log.error("[FinderService::getListaSottoClassificazioni]  "
					+ e.getMessage(), e);
			throw new WebServiceException(e.getMessage());
		}
	}

	public Collection getListaAssessorati() throws WebServiceException {
		log.info("[FinderService::getListaAssessorati] BEGIN");
		try {
			return getFinregioService().getListaEnti();
		} catch (ServiceException e) {
			log.error(
					"[FinderService::getListaAssessorati]  " + e.getMessage(),
					e);
			throw new WebServiceException(e.getMessage());
		} finally {
			log.info("[FinderService::getListaAssessorati] END");
		}

	}

	public Collection getListaDirezioni() throws WebServiceException {
		log.info("[FinderService::getListaDirezioni] BEGIN");
		try {
			return getFinregioService().getListaDirezioni();
		} catch (ServiceException e) {
			log.error("[FinderService::getListaDirezioni]  " + e.getMessage(),
					e);
			throw new WebServiceException(e.getMessage());
		} finally {
			log.info("[FinderService::getListaDirezioni] END");
		}

	}

	public Collection getListaSettori() throws WebServiceException {
		log.info("[FinderService::getListaSettori] BEGIN");
		try {

			return getFinregioService().getListaSettori();
		} catch (ServiceException e) {
			log.error("[FinderService::getListaSettori]  " + e.getMessage(), e);
			throw new WebServiceException(e.getMessage());
		} finally {
			log.info("[FinderService::getListaSettori] END");

		}

	}

	public Collection getListaDirezioniByEnte(Ente ente)
			throws WebServiceException {
		log.info("[FinderService::getListaDirezioniByEnte] BEGIN");
		try {
			return getFinregioService().getListaDirezioniByEnte(ente);
		} catch (ServiceException e) {
			log.error("[FinderService::getListaDirezioniByEnte]  "
					+ e.getMessage(), e);
			throw new WebServiceException(e.getMessage());
		} finally {
			log.info("[FinderService::getListaDirezioniByEnte] END");
		}

	}

	public Collection getListaSettoriByDirezione(Direzione direzione)
			throws WebServiceException {
		log.info("[FinderService::getListaSettoriByDirezione] BEGIN");
		try {
			return getFinregioService().getListaSettoriByDirezione(direzione);
		} catch (ServiceException e) {
			log.error("[FinderService::getListaSettoriByDirezione]  "
					+ e.getMessage(), e);
			throw new WebServiceException(e.getMessage());
		} finally {
			log.info("[FinderService::getListaSettoriByDirezione] END");
		}

	}

	public Collection getListaClassificazioni() throws WebServiceException {
		try {
			return getFinregioService().getListaClassificazioni();
		} catch (ServiceException e) {
			log.error("[FinderService::getListaSottoClassificazioni]  "
					+ e.getMessage(), e);
			throw new WebServiceException(e.getMessage());
		}
	}

	public Scheda getAnnoNumQuadernoAttuale() throws WebServiceException {
		try {
			return getSchedaService().loadAnnoNumQuadernoAttuale();
		} catch (ServiceException e) {
			log.error("[FinderService::getAnnoNumQuadernoAttuale]  "
					+ e.getMessage(), e);
			throw new WebServiceException(e.getMessage());
		}
	}

	public Collection getListaAltriEnti() throws WebServiceException {
		log.info("[FinderService::getListaAltriEnti] BEGIN");
		try {
			return getFinregioService().getListaAltriEnti();
		} catch (ServiceException e) {
			log.error("[FinderService::getListaAltriEnti]  "
					+ e.getMessage(), e);
			throw new WebServiceException(e.getMessage());
		} finally {
			log.info("[FinderService::getListaAltriEnti] END");
		}
	}

	public Collection getListaCompletaEnti() throws WebServiceException {
		try {
			return getFinregioService().getListaCompletaEnti();
		} catch (ServiceException e) {
			log.error("[FinderService::getListaCompletaEnti]  "
					+ e.getMessage(), e);
			throw new WebServiceException(e.getMessage());
			
		} finally {
			log.info("[FinderService::getListaCompletaEnti] END");
			
		}
	}
	public Collection getListaAnni() throws WebServiceException {
		log.info("[FinderService::getListaAnni] BEGIN");
		try {
			return getFinregioService().getListaAnni();
		} catch (ServiceException e) {
			log.error("[FinderService::getListaAnni]  "
					+ e.getMessage(), e);
			throw new WebServiceException(e.getMessage());
		}finally{
			log.info("[FinderService::getListaAnni] END");
		}
	}
	/**
	 * @return
	 */
	private FinregioService getFinregioService() {
		FinregioService service = new ServiceLocator().getFinRegioService();
		return service;
	}

	private SchedaService getSchedaService() {
		SchedaService service = new ServiceLocator().getSchedaService();
		return service;
	}



}
